home *** CD-ROM | disk | FTP | other *** search
- XX ''''''''''''''''''''''''''''''''''''''''''''''''''
- XX ' '
- XX ' INVENTORY '
- XX ' '
- XX ' CREATED BY APG '
- XX ' '
- XX ' S & M SOFTWARE '
- XX ' '
- XX ' COPYRIGHT 1993 '
- XX ' '
- XX ' '
- XX ' Author: John N Shankland '
- XX ' Date: 01-28-1993 '
- XX ' Time: 10:43:36 '
- XX ' '
- XX ''''''''''''''''''''''''''''''''''''''''''''''''''
-
- DEFINT A-Z
- CONST FALSE = 0, TRUE = NOT FALSE
- TYPE rectype 'Define variables for file
- XX inbr AS STRING * 10
- XX desc AS STRING * 30
- XX num1 AS DOUBLE
- XX num2 AS INTEGER
- XX num3 AS SINGLE
- XX num4 AS SINGLE
- sts AS STRING * 1
- END TYPE
- TYPE indextype 'Define index
- recnum AS INTEGER
- XX inbr AS STRING * 10
- END TYPE
- DECLARE FUNCTION getinput$ (work$, fl%, nflg$, plen, prec, form$, act$, mode$)
- DECLARE SUB arrow (mode$, opt$, tracfld)
- DECLARE SUB clearfore ()
- DECLARE SUB displaydata ()
- DECLARE SUB export ()
- DECLARE SUB message (msg$, resp$)
- DECLARE SUB newrec (recnum, numofrec, maxrec, newkey$, exit$, mode$)
- DECLARE SUB nextrec (direc$, exit$, numofrec, recnum)
- DECLARE SUB sortindex ()
- DIM SHARED numofrec
- XX DIM SHARED f7.2$
- XX DIM SHARED f4.0$
- XX DIM SHARED f2.2$
- XX DIM SHARED f0.3$
- XX DIM SHARED inv AS rectype
- XX f7.2$ = "########.##"
- XX f4.0$ = "#####"
- XX f2.2$ = "###.##"
- XX f0.3$ = "#.###"
-
- ON ERROR GOTO errhandle
-
- COLOR 15, 0
- CLS
-
- XX OPEN "inv.dat" FOR RANDOM AS #1 LEN = LEN(inv)
-
- XX numofrec = LOF(1) \ LEN(inv)
- maxrec = numofrec + 100
- DIM SHARED index(1 TO maxrec) AS indextype
- IF numofrec <> 0 THEN
- FOR recnum = 1 TO numofrec
- XX GET #1, recnum, inv
- index(recnum).recnum = recnum
- XX index(recnum).inbr = inv.inbr
- NEXT
- END IF
- '
- '----- Print menu -----'
- '
- XX LOCATE 1, 35
- COLOR 7, 9
- XX PRINT " INVENTORY " '
- XX LOCATE 2, 35
- XX PRINT "MAINTENANCE" '
- sortindex 'sort records
- recnum = 0 'reset record number
-
- XX LOCATE 4, 10: PRINT "01-Item number "
- XX LOCATE 6, 5: PRINT "02-Description "
- XX LOCATE 7, 5: PRINT "03-num 7.2 "
- XX LOCATE 8, 5: PRINT "04-num 4.0 "
- XX LOCATE 9, 5: PRINT "05-num 2.2 "
- XX LOCATE 10, 5: PRINT "06-num 4 0.3 "
- '
- '----- Start processing -----'
- '
- start:
- mode$ = ""
- XX inv.inbr = ""
- XX inv.desc = ""
- XX inv.num1 = 0
- XX inv.num2 = 0
- XX inv.num3 = 0
- XX inv.num4 = 0
- XX inv.sts = ""
- nflg$ = ""
- clearfore
- XX LOCATE 4, 26
- XX newkey$ = getinput$(inv.inbr, 10, "S", 0, 0, "", act$, mode$)
- IF act$ = "PU" OR act$ = "PD" THEN
- opt$ = act$
- IF recnum = 0 THEN
- IF opt$ = "PU" AND numofrec <> 0 THEN recnum = numofrec + 1
- END IF
- GOTO menu10
- END IF
- XX IF newkey$ = " " GOTO fin
- XX IF UCASE$(newkey$) = "N " THEN
- opt$ = "N"
- GOTO menu10
- END IF
- GOTO io
- '
- '------ Option bar -----'
- '
- menu:
- mode$ = "C"
- LOCATE 23, 1
- PRINT STRING$(80, " ")
- LOCATE 23, 12, 1
- COLOR 7, 9
- PRINT "FIELD #, PgUp, PgDn, ";
- PRINT "All, Next, Back, Delete, Sort, Export";
- COLOR 15, 0
- PRINT " "
- COLOR 15, 9
- LOCATE 23, 18: PRINT "#"
- LOCATE 23, 33: PRINT "A"
- LOCATE 23, 38: PRINT "N"
- LOCATE 23, 44: PRINT "B"
- LOCATE 23, 50: PRINT "D"
- LOCATE 23, 58: PRINT "S"
- LOCATE 23, 64: PRINT "E"
-
- COLOR 15, 0
- opt$ = ""
- menu5:
- LOCATE 23, 71
- PRINT opt$;
- DO
- instr$ = INKEY$
- LOOP WHILE instr$ = ""
-
- IF INSTR("BANDSE", UCASE$(instr$)) > 0 THEN opt$ = instr$: GOTO menu10
- IF instr$ = CHR$(13) GOTO menu10
- IF instr$ = CHR$(27) GOTO menu
- IF instr$ = CHR$(8) GOTO menu
- IF LEN(instr$) = 2 THEN
- code = ASC(RIGHT$(instr$, 1))
- IF code = &H49 THEN opt$ = "PU"
- IF code = &H51 THEN opt$ = "PD"
- GOTO menu10
- END IF
- opt$ = opt$ + instr$
- GOTO menu5
- '
- '----- Start here for action keys -----'
- '
- menu10:
- resp$ = ""
- IF opt$ = "" THEN GOTO start
- opt$ = UCASE$(opt$)
- IF MID$(opt$, 1, 1) = "0" THEN opt$ = MID$(opt$, 2, 1)
- LOCATE 23, 1
- PRINT STRING$(80, " ")
- LOCATE 23, 6, 1
- COLOR 7, 9
- IF INSTR("SEBNPUPD", opt$) = 0 THEN
- PRINT "Active Keys: <PgUp>, <PgDn>, <Arrows>, <Del>, <Ins>, <Esc> or <Enter>";
- COLOR 15, 9
- LOCATE 23, 20: PRINT "PgUp";
- LOCATE 23, 28: PRINT "PgDn";
- LOCATE 23, 36: PRINT "Arrows";
- LOCATE 23, 46: PRINT "Del";
- LOCATE 23, 53: PRINT "Ins";
- LOCATE 23, 60: PRINT "Esc";
- LOCATE 23, 69: PRINT "Enter";
- END IF
- COLOR 15, 0
-
- SELECT CASE opt$
- CASE "1"
- message "Can not change index - Press any key", resp$
- GOTO menu
- XX CASE "2" 'Description
- XX GOTO fld20
- XX CASE "3"
- XX GOTO fld30
- XX CASE "4"
- XX GOTO fld40
- XX CASE "5"
- XX GOTO fld50
- XX CASE "6"
- XX GOTO fld60
- CASE "A"
- mode$ = "A"
- GOTO fld20
- CASE "N", "PD"
- direc$ = "F"
- nextrec direc$, exit$, numofrec, recnum
- IF exit$ = "A" GOTO start
- GOTO menu
- CASE "B", "PU"
- direc$ = "B"
- nextrec direc$, exit$, numofrec, recnum
- IF exit$ = "A" GOTO start
- GOTO menu
- CASE "D"
- XX inv.sts = "D"
- GOTO del
- CASE "S"
- resp$ = "1"
- message "Sorting file - Please wait", resp$
- sortindex
- resp$ = "2"
- message "", resp$
- CASE "E"
- CLOSE (2)
- XX KILL "john.exp"
- resp$ = "1"
- message "Preparing file for export - Please wait", resp$
- export
- resp$ = "2"
- message "", resp$
- XX GET #1, recnum, john
- END SELECT
- GOTO menu
- '
- '----- Input fields -----'
- '
- XX fld20: ' Description
- XX tracfld = 2
- XX LOCATE 6, 26
- XX inv.desc = getinput$(inv.desc, 30, "S", 0, 0, "", act$, mode$)
- XX LOCATE 25, 1
- XX PRINT STRING$(80, " ");
- XX IF inv.desc = " " AND mode$ <> "C" THEN
- XX GOTO start
- XX END IF
- XX IF mode$ = "C" OR act$ <> "" GOTO add
- XX
- XX fld30:
- XX tracfld = 3
- XX LOCATE 7, 26
- XX IF mode$ = "N" THEN
- XX num1$ = STRING$(11, " ")
- XX ELSE
- XX num1$ = STR$(inv.num1) + STRING$(11, " ")
- XX END IF
- XX inv.num1 = VAL(getinput$(num1$, 11, "N", 7, 2, f7.2$, act$, mode$))
- XX IF mode$ = "C" OR act$ <> "" GOTO add
- XX
- XX fld40:
- XX tracfld = 4
- XX LOCATE 8, 26
- XX IF mode$ = "N" THEN
- XX num2$ = STRING$(6, " ")
- XX ELSE
- XX num2$ = STR$(inv.num2) + STRING$(6, " ")
- XX END IF
- XX inv.num2 = VAL(getinput$(num2$, 6, "N", 4, 0, f4.0$, act$, mode$))
- XX IF mode$ = "C" OR act$ <> "" GOTO add
- XX
- XX fld50:
- XX tracfld = 5
- XX LOCATE 9, 26
- XX IF mode$ = "N" THEN
- XX num3$ = STRING$(6, " ")
- XX ELSE
- XX num3$ = STR$(inv.num3) + STRING$(6, " ")
- XX END IF
- XX inv.num3 = VAL(getinput$(num3$, 6, "N", 2, 2, f2.2$, act$, mode$))
- XX IF mode$ = "C" OR act$ <> "" GOTO add
- XX
- XX fld60:
- XX tracfld = 6
- XX LOCATE 10, 26
- XX IF mode$ = "N" THEN
- XX num4$ = STRING$(5, " ")
- XX ELSE
- XX num4$ = STR$(inv.num4) + STRING$(5, " ")
- XX END IF
- XX inv.num4 = VAL(getinput$(num4$, 5, "N", 0, 3, f0.3$, act$, mode$))
- XX IF mode$ = "C" OR act$ <> "" GOTO add
- '
- '----- Add or change record or field -----'
- '
- add: 'Add record
- newrec recnum, numofrec, maxrec, newkey$, exit$, mode$
- IF exit$ = "Y" THEN GOTO fin
- IF act$ = "" GOTO menu
- IF act$ = "PD" THEN direc$ = "F"
- IF act$ = "PU" THEN direc$ = "B"
- IF act$ = "PD" OR act$ = "PU" THEN
- nextrec direc$, exit$, numofrec, recnum
- IF exit$ = "A" GOTO start
- GOTO menu10
- END IF
- IF mode$ = "N" THEN mode$ = "Z"
- IF act$ = "AU" THEN
- IF tracfld - 1 < 2 THEN
- BEEP
- tracfld = 3
- END IF
- opt$ = MID$(STR$(tracfld - 1), 2)
- GOTO menu10
- END IF
- IF act$ = "AD" THEN
- XX IF tracfld + 1 > 6 THEN
- BEEP
- XX tracfld = 5
- END IF
- opt$ = MID$(STR$(tracfld + 1), 2)
- GOTO menu10
- END IF
-
- del: 'Delete record
- XX PUT #1, index(recnum).recnum, inv
- XX inv.sts = ""
- GOTO start
- '
- '----- Set for new or get exsisting record -----'
- '
- io:
- FOR recnum = 1 TO numofrec
- XX IF index(recnum).inbr = newkey$ THEN GOTO io10
- NEXT
- mode$ = "N"
- XX inv.inbr = newkey$
- resp$ = "1"
- message "New record - Enter field data or <ENTER> to abort", resp$
- GOTO fld20
- io10:
- XX GET #1, index(recnum).recnum, inv
- XX IF inv.sts = "D" THEN
- message "This record has been deleted - Do you wish to restore y/N ", resp$
- IF UCASE$(resp$) = "Y" THEN
- XX inv.sts = ""
- XX PUT #1, index(recnum).recnum, inv
- ELSE
- GOTO start
- END IF
- END IF
- displaydata
- GOTO menu
- '
- '----- End program -----'
- '
- fin:
- CLS
- CLOSE
- XX RUN "zmenu"
- END
- '
- '----- Error handling -----'
- '
- errhandle:
- IF ERR = 53 THEN
- RESUME NEXT
- END IF
- CLS
- PRINT "Unexpected error "; ERR
- PRINT "Please note this error number and consult your QuickBasic Manual!"
- INPUT "", a$
- CLOSE
- XX RUN "zmenu"
- END
-
- SUB arrow (mode$, opt$, tracfld)
- IF mode$ = "AU" THEN
- opt$ = MID$(STR$(tracfld - 1), 2)
- EXIT SUB
- END IF
- IF mode$ = "AD" THEN
- opt$ = MID$(STR$(tracfld + 1), 2)
- EXIT SUB
- END IF
- END SUB
-
- SUB clearfore
- COLOR 15, 0
- XX LOCATE 4, 26
- XX PRINT STRING$(10, " ")
- XX LOCATE 6, 26
- XX PRINT STRING$(30, " ")
- XX LOCATE 7, 26
- XX PRINT STRING$(11, " ")
- XX LOCATE 8, 26
- XX PRINT STRING$(6, " ")
- XX LOCATE 9, 26
- XX PRINT STRING$(6, " ")
- XX LOCATE 10, 26
- XX PRINT STRING$(5, " ")
- LOCATE 23, 1
- PRINT STRING$(80, " ")
- LOCATE 23, 4
- PRINT "Enter key information, <N> for next, <PgUp>, <PgDn>, or <ENTER> to exit"
- END SUB
-
- SUB displaydata
- XX LOCATE 4, 26: PRINT inv.inbr
- XX LOCATE 6, 26: PRINT inv.desc
- XX LOCATE 7, 26: PRINT USING f7.2$; inv.num1
- XX LOCATE 8, 26: PRINT USING f4.0$; inv.num2
- XX LOCATE 9, 26: PRINT USING f2.2$; inv.num3
- XX LOCATE 10, 26: PRINT USING f0.3$; inv.num4
- END SUB
-
- SUB export
- q$ = CHR$(34)
- XX OPEN "jphone.exp" FOR OUTPUT AS #2
-
- FOR i = 1 TO numofrec
- XX GET #1, i, jphone
- XX data$ = q$ + jphone.newidx + q$ + ","
- XX data$ = data$ + q$ + jphone.idx + q$ + ","
- XX data$ = data$ + q$ + jphone.fname + q$
- PRINT #2, data$
- NEXT i
- END SUB
-
- FUNCTION getinput$ (work$, fl, nflg$, plen, prec, form$, act$, mode$)
- '
- ' ----- set varailbles -----'
- '
- crow = CSRLIN
- ccol = POS(0)
- beg = ccol - 1
- maxcol = ccol + fl - 1
- mincol = ccol
- new$ = "N"
- act$ = ""
- GOTO begin5
- '
- ' ----- get inputed character -----'
- '
- begin:
- BEEP
- begin5:
- dotpos = INSTR(work$, ".")
- signpos = INSTR(work$, "-")
- IF dotpos = 0 THEN dot = 0
- IF signpos = 0 THEN sign = 0
- code = 0
- LOCATE crow, mincol, 1
- IF nflg$ = "L" OR edit$ = "Y" THEN PRINT work$;
- work# = VAL(work$)
- IF nflg$ = "N" AND edit$ = "" THEN PRINT USING form$; work#
- LOCATE crow, ccol, , 7
- IF insert$ = "Y" THEN LOCATE crow, ccol, 1, 0, 7
- DO
- instr$ = INKEY$
- LOOP WHILE instr$ = ""
- '
- ' ----- is it a special character? -----'
- '
- IF instr$ = CHR$(27) THEN work$ = STRING$(fl, " "): ccol = mincol: GOTO begin5
- IF instr$ = CHR$(8) THEN dir$ = "L": key$ = "B": GOTO begin10
- IF LEN(instr$) = 2 THEN
- code = ASC(RIGHT$(instr$, 1))
- IF code = &H4B THEN dir$ = "L": key$ = "L": GOTO begin10 'Left arrow
- IF code = &H4D THEN dir$ = "R": key$ = "R": GOTO begin10 'Right arrow
- IF code = &H4F THEN dir$ = "R": key$ = "E": GOTO begin10 'End
- IF code = &H47 THEN dir$ = "L": key$ = "H": GOTO begin10 'Home
- IF code = &H52 THEN 'Insert
- IF insert$ = "" THEN
- dir$ = "L"
- key$ = "I"
- insert$ = "Y"
- GOTO begin10
- ELSE
- insert$ = ""
- dir$ = "R"
- key$ = "R"
- GOTO begin10
- END IF
- END IF
- IF code = &H53 THEN dir$ = "R": key$ = "D": GOTO begin10 'Delete
- IF code = &H49 THEN act$ = "PU": GOTO begin10 'Page up
- IF code = &H51 THEN act$ = "PD": GOTO begin10 'Page down
- IF code = &H48 THEN act$ = "AU": GOTO begin10 'Up arrow
- IF code = &H50 THEN act$ = "AD": GOTO begin10 'Down arrow
- GOTO begin
- ELSE
- dir$ = "R": key$ = "R"
- END IF
- '
- ' ----- does this character request an exit? ------ '
- '
- begin10:
- IF instr$ = CHR$(13) OR LEN(act$) = 2 THEN
- IF nflg$ = "L" THEN
- getinput$ = work$
- EXIT FUNCTION
- ELSE
- dec = INSTR(work$, ".")
- IF dec = 0 AND edit$ = "Y" THEN
- IF prec = 0 THEN
- getinput$ = work$
- EXIT FUNCTION
- END IF
- factor$ = "." + RIGHT$("000000000001", prec)
- worknum# = VAL(work$) * VAL(factor$)'
- getinput$ = STR$(worknum#)
- EXIT FUNCTION
- ELSE
- getinput$ = work$
- EXIT FUNCTION
- END IF
- END IF
- END IF
- IF code = 0 AND instr$ <> CHR$(8) GOTO valid
- '
- ' ----- perform action of special key ----- '
- '
- IF dir$ = "R" AND ccol = maxcol THEN GOTO begin
- IF dir$ = "L" AND ccol = mincol AND key$ = "B" AND LEN(RTRIM$(work$)) = 1 THEN
- MID$(work$, 1, 1) = " ": GOTO begin5
- END IF
- IF dir$ = "L" AND ccol = mincol THEN GOTO begin
- SELECT CASE key$
- CASE "L"
- ccol = ccol - 1
- CASE "R"
- ccol = ccol + 1
- IF ccol > maxcol THEN
- BEEP
- ccol = maxcol
- END IF
- CASE "E"
- ccol = mincol + LEN(RTRIM$(work$))
- CASE "H"
- ccol = mincol
- CASE "D"
- work$ = MID$(work$, 1, ccol - beg - 1) + MID$(work$, ccol - beg + 1, fl) + " "
- CASE "B"
- work$ = MID$(work$, 1, ccol - beg - 2) + MID$(work$, ccol - beg, fl) + " "
- ccol = ccol - 1
- END SELECT
- GOTO begin5
- '
- ' ----- check validity of inputed character ----- '
- '
- valid:
-
- IF nflg$ = "L" THEN
- IF insert$ = "Y" THEN
- work1$ = MID$(work$, 1, ccol - beg - 1)
- work2$ = MID$(work$, ccol - beg, fl)
- work$ = work1$ + instr$ + work2$
- work$ = MID$(work$, 1, fl)
- ccol = ccol + 1
- IF ccol > maxcol THEN
- ccol = maxcol
- GOTO begin
- END IF
- GOTO begin5
- END IF
- MID$(work$, ccol - beg) = instr$
- ccol = ccol + 1
- IF ccol > maxcol THEN
- ccol = maxcol
- GOTO begin
- END IF
- GOTO begin5
- END IF
- IF new$ = "N" THEN
- blen = plen + prec + 2
- blank$ = STRING$(blen, " ")
- work$ = blank$: new$ = ""
- END IF
- IF ccol = mincol THEN
- PRINT work$
- LOCATE crow, mincol
- edit$ = "Y"
- first = INSTR("-.1234567890", instr$)
- SELECT CASE first
- CASE 0
- GOTO begin
- CASE 1
- sign = 1
- GOTO accept
- CASE 2
- IF dot = 1 THEN
- GOTO begin
- END IF
- dot = 1
- GOTO accept
- END SELECT
- GOTO accept
- END IF
- other = INSTR(".1234567890", instr$)
- SELECT CASE other
- CASE 0
- GOTO begin
- CASE 1
- IF dot = 1 THEN
- GOTO begin
- END IF
- dot = 1
- GOTO accept
- END SELECT
- GOTO accept
- '
- ' ------ accept valid numeric and manipulate ----- '
- '
- accept:
- IF prec = 0 THEN
- IF instr$ = "." AND ccol <> mincol + plen + sign GOTO begin
- maxlen = plen + sign + dot
- IF LEN(RTRIM$(work$)) = maxlen THEN
- GOTO begin
- ELSE
- MID$(work$, ccol - beg) = instr$
- ccol = ccol + 1
- GOTO accept10
- END IF
- END IF
-
- dotpos = INSTR(work$, ".")
- IF dotpos = 0 THEN
- maxlen = plen + sign
- IF LEN(RTRIM$(work$)) = maxlen THEN
- IF instr$ <> "." THEN
- MID$(work$, ccol - beg) = "." + instr$
- ccol = ccol + 2
- GOTO accept10
- ELSE
- MID$(work$, ccol - beg) = instr$
- ccol = ccol + 1
- GOTO accept10
- END IF
- ELSE
- MID$(work$, ccol - beg) = instr$
- ccol = ccol + 1
- GOTO accept10
- END IF
- ELSE
- IF instr$ = "." THEN GOTO begin
- maxlenpr = prec + dotpos
- IF prec = 0 THEN maxlenpr = plen
- IF LEN(RTRIM$(work$)) = maxlenpr THEN
- GOTO begin
- ELSE
- MID$(work$, ccol - beg) = instr$
- ccol = ccol + 1
- GOTO accept10
- END IF
- END IF
- accept10:
- GOTO begin5
-
- END FUNCTION
-
- SUB message (msg$, resp$)
- '
- ' resp$ = "" wait for response
- ' resp$ = "1" don't clear message, exit
- ' resp$ = "2" clear message, exit
- '
- IF resp$ = "2" THEN GOTO msg10
- IF resp$ = "" THEN BEEP
- Y = (80 - LEN(msg$)) / 2
- LOCATE 23, 1
- PRINT STRING$(80, " ")
- LOCATE 25, Y, 0
- PRINT msg$;
- IF resp$ = "1" THEN EXIT SUB
- DO
- resp$ = INKEY$
- LOOP WHILE resp$ = ""
- LOCATE 25, Y
- PRINT STRING$(LEN(msg$), " ");
- EXIT SUB
- msg10:
- LOCATE 25, 1
- PRINT STRING$(80, " ");
- END SUB
-
- SUB newrec (recnum, numofrec, maxrec, newkey$, exit$, mode$)
- IF mode$ = "N" THEN
- numofrec = numofrec + 1
- IF numofrec = maxrec THEN
- message "Can not add any more records this session - Restart", resp$
- exit$ = "Y"
- END IF
- XX PUT #1, numofrec, inv 'Add new record
- index(numofrec).recnum = numofrec
- XX index(numofrec).inbr = newkey$
- ELSE
- XX PUT #1, index(recnum).recnum, inv 'Write changed record
- END IF
- END SUB
-
- SUB nextrec (direc$, exit$, numofrec, recnum)
- exit$ = ""
- IF direc$ = "F" THEN recnum = recnum + 1
- IF direc$ = "B" THEN recnum = recnum - 1
- IF recnum > numofrec THEN
- message "End of file - Press any key", resp$
- recnum = 0
- exit$ = "A"
- EXIT SUB
- END IF
- IF recnum = 0 THEN
- message "Start of file - Press any key", resp$
- exit$ = "A"
- EXIT SUB
- END IF
- XX GET #1, index(recnum).recnum, inv
- XX IF inv.sts = "D" THEN
- message "This record has been deleted - Do you wish to restore y/N ", resp$
- IF UCASE$(resp$) = "Y" THEN
- XX inv.sts = ""
- XX PUT #1, index(recnum).recnum, inv
- ELSE
- exit$ = "A"
- EXIT SUB
- END IF
- END IF
- displaydata
- END SUB
-
- SUB sortindex STATIC
- SHARED index() AS indextype, numofrec
- offset = numofrec \ 2
- DO WHILE offset > 0
- limit = numofrec - offset
- DO
- switch = FALSE
- FOR i = 1 TO limit
- XX IF index(I).inbr > index(I + offset).inbr THEN
- SWAP index(i), index(i + offset)
- switch = i
- END IF
- NEXT i
- limit = switch
- LOOP WHILE switch
- offset = offset \ 2
- LOOP
- END SUB
-
-